package com.neusoft.elmboot.po.point;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.neusoft.elmboot.util.PointUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
//@AllArgsConstructor
//@NoArgsConstructor
@TableName("pointtransaction")
public class PointTransaction {
    /**
     * 积分id
     */
    @TableId
    private String ptId;

    /**
     * 积分对应的用户id
     */
    @TableField("user_id")
    private String userId;

    /**
     * 积分获取/消费途径id
     * 获取：1：支付订单（每x元赠x积分，不满1元的则舍去） 2：充值（充x元赠x积分，不满1元的则舍去） 3：评论（每条评论5积分，但每天最多通过此方式获取3次积分） 9：其他（如商家赠送）
     * 消费：4：用积分换购奖品
     */
    private Integer channelId;

    /**
     * 相关事件id，如交易记录id（transId），评论id，换购id等
     */
    private String eventId;

    /**
     * 积分值 为正：获取积分 为负：消费积分
     */
    private Integer value;

    /**
     * 积分获取时间
     */
    private LocalDateTime createTime;

    /**
     * 积分过期时间
     */
    private LocalDateTime expiredTime;

    /**
     * 积分状态
     * 值为x表示剩余x积分未消费，为-1说明已过期，为空说明该记录为消费积分
     */
    private Integer state;

    public PointTransaction(){}

    public PointTransaction(String userId, Integer channelId, String eventId, Integer value){
        this.ptId = System.currentTimeMillis() + userId;
        this.userId = userId;
        this.channelId = channelId;
        this.eventId = eventId;
        this.value = value;
        this.createTime = LocalDateTime.now();

        if (value < 0) {
            this.state = null;
            this.expiredTime = null;
        } else {
            this.state = value;
            this.expiredTime = this.createTime.plusMonths(PointUtils.VALID_TIME);
        }
    }
}
